home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / internal / UTF8Reader$UTF8DataChunk.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  4.4 KB  |  422 lines

  1. package com.ibm.xml.internal;
  2.  
  3. import com.ibm.xml.framework.ChunkyCharArray;
  4. import com.ibm.xml.framework.StringPool;
  5. import com.ibm.xml.framework.StringProducer;
  6.  
  7. class UTF8Reader$UTF8DataChunk implements StringProducer {
  8.    // $FF: synthetic field
  9.    private final UTF8Reader this$0;
  10.    protected StringPool fStringPool;
  11.    protected int fChunk;
  12.    protected byte[] fData;
  13.    protected UTF8Reader$UTF8DataChunk fPreviousChunk;
  14.    protected UTF8Reader$UTF8DataChunk fNextChunk;
  15.  
  16.    protected UTF8Reader$UTF8DataChunk(UTF8Reader var1, StringPool var2, UTF8Reader$UTF8DataChunk var3) throws Exception {
  17.       this.this$0 = var1;
  18.       this.this$0 = var1;
  19.       this.fStringPool = var2;
  20.       this.fChunk = var3 == null ? 0 : var3.fChunk + 1;
  21.       this.fPreviousChunk = var3;
  22.       if (var3 != null) {
  23.          var3.fNextChunk = this;
  24.       }
  25.  
  26.    }
  27.  
  28.    protected UTF8Reader$UTF8DataChunk(UTF8Reader var1, UTF8Reader$UTF8DataChunk var2) {
  29.       this.this$0 = var1;
  30.       this.this$0 = var1;
  31.       this.fStringPool = var2.fStringPool;
  32.       this.fChunk = var2.fChunk;
  33.       this.fData = var2.fData;
  34.       this.fPreviousChunk = null;
  35.       this.fNextChunk = null;
  36.    }
  37.  
  38.    public UTF8Reader$UTF8DataChunk chunkFor(int var1) {
  39.       int var2 = var1 >> 14;
  40.  
  41.       UTF8Reader$UTF8DataChunk var3;
  42.       for(var3 = this; var2 != var3.fChunk; var3 = var3.fPreviousChunk) {
  43.       }
  44.  
  45.       return var3;
  46.    }
  47.  
  48.    public byte[] toByteArray() {
  49.       return this.fData;
  50.    }
  51.  
  52.    public void setByteArray(byte[] var1) {
  53.       this.fData = var1;
  54.    }
  55.  
  56.    public UTF8Reader$UTF8DataChunk nextChunk() {
  57.       return this.fNextChunk;
  58.    }
  59.  
  60.    public void clearPreviousChunk() {
  61.       if (this.fPreviousChunk != null) {
  62.          this.fPreviousChunk.fNextChunk = null;
  63.          this.fPreviousChunk = null;
  64.       }
  65.  
  66.    }
  67.  
  68.    public String toString(int var1, int var2) {
  69.       StringBuffer var3 = new StringBuffer(var2);
  70.       UTF8Reader$UTF8DataChunk var4 = this;
  71.       int var5 = var1 + var2;
  72.       int var6 = var1 & 16383;
  73.       byte[] var7 = this.fData;
  74.  
  75.       while(var1 < var5) {
  76.          int var8 = var7[var6++] & 255;
  77.          ++var1;
  78.          if (var6 == 16384) {
  79.             var4 = var4.fNextChunk;
  80.             var7 = var4.fData;
  81.             var6 = 0;
  82.          }
  83.  
  84.          if ((var8 & 128) == 0) {
  85.             var3.append((char)var8);
  86.          } else {
  87.             int var9 = var7[var6++] & 255;
  88.             ++var1;
  89.             if (var6 == 16384) {
  90.                var4 = var4.fNextChunk;
  91.                var7 = var4.fData;
  92.                var6 = 0;
  93.             }
  94.  
  95.             if ((224 & var8) == 192) {
  96.                int var10 = ((31 & var8) << 6) + (63 & var9);
  97.                var3.append((char)var10);
  98.             } else {
  99.                int var13 = var7[var6++] & 255;
  100.                ++var1;
  101.                if (var6 == 16384) {
  102.                   var4 = var4.fNextChunk;
  103.                   var7 = var4.fData;
  104.                   var6 = 0;
  105.                }
  106.  
  107.                if ((240 & var8) == 224) {
  108.                   int var11 = ((15 & var8) << 12) + ((63 & var9) << 6) + (63 & var13);
  109.                   var3.append((char)var11);
  110.                } else {
  111.                   int var14 = var7[var6++] & 255;
  112.                   ++var1;
  113.                   if (var6 == 16384) {
  114.                      var4 = var4.fNextChunk;
  115.                      var7 = var4.fData;
  116.                      var6 = 0;
  117.                   }
  118.  
  119.                   int var12 = ((15 & var8) << 18) + ((63 & var9) << 12) + ((63 & var13) << 6) + (63 & var14);
  120.                   if (var12 < 65536) {
  121.                      var3.append((char)var12);
  122.                   } else {
  123.                      var3.append((char)((var12 - 65536 >> 10) + '\ud800'));
  124.                      var3.append((char)((var12 - 65536 & 1023) + '\udc00'));
  125.                   }
  126.                }
  127.             }
  128.          }
  129.       }
  130.  
  131.       return var3.toString();
  132.    }
  133.  
  134.    public boolean equalsString(int var1, int var2, String var3, int var4) {
  135.       UTF8Reader$UTF8DataChunk var5 = this;
  136.       int var6 = var1 + var2;
  137.       int var7 = var1 & 16383;
  138.       byte[] var8 = this.fData;
  139.       int var9 = 0;
  140.  
  141.       while(var1 < var6) {
  142.          if (var9 == var4) {
  143.             return false;
  144.          }
  145.  
  146.          int var10 = var8[var7++] & 255;
  147.          ++var1;
  148.          if (var7 == 16384) {
  149.             var5 = var5.fNextChunk;
  150.             var8 = var5.fData;
  151.             var7 = 0;
  152.          }
  153.  
  154.          if ((var10 & 128) == 0) {
  155.             if (var10 != var3.charAt(var9++)) {
  156.                return false;
  157.             }
  158.          } else {
  159.             int var11 = var8[var7++] & 255;
  160.             ++var1;
  161.             if (var7 == 16384) {
  162.                var5 = var5.fNextChunk;
  163.                var8 = var5.fData;
  164.                var7 = 0;
  165.             }
  166.  
  167.             if ((224 & var10) == 192) {
  168.                int var12 = ((31 & var10) << 6) + (63 & var11);
  169.                if (var12 != var3.charAt(var9++)) {
  170.                   return false;
  171.                }
  172.             } else {
  173.                int var16 = var8[var7++] & 255;
  174.                ++var1;
  175.                if (var7 == 16384) {
  176.                   var5 = var5.fNextChunk;
  177.                   var8 = var5.fData;
  178.                   var7 = 0;
  179.                }
  180.  
  181.                if ((240 & var10) == 224) {
  182.                   int var13 = ((15 & var10) << 12) + ((63 & var11) << 6) + (63 & var16);
  183.                   if (var13 != var3.charAt(var9++)) {
  184.                      return false;
  185.                   }
  186.                } else {
  187.                   int var17 = var8[var7++] & 255;
  188.                   ++var1;
  189.                   if (var7 == 16384) {
  190.                      var5 = var5.fNextChunk;
  191.                      var8 = var5.fData;
  192.                      var7 = 0;
  193.                   }
  194.  
  195.                   int var14 = ((15 & var10) << 18) + ((63 & var11) << 12) + ((63 & var16) << 6) + (63 & var17);
  196.                   if (var14 < 65536) {
  197.                      if (var14 != var3.charAt(var9++)) {
  198.                         return false;
  199.                      }
  200.                   } else {
  201.                      if ((var14 - 65536 >> 10) + '\ud800' != var3.charAt(var9++)) {
  202.                         return false;
  203.                      }
  204.  
  205.                      if (var9 == var4) {
  206.                         return false;
  207.                      }
  208.  
  209.                      if ((var14 - 65536 & 1023) + '\udc00' != var3.charAt(var9++)) {
  210.                         return false;
  211.                      }
  212.                   }
  213.                }
  214.             }
  215.          }
  216.       }
  217.  
  218.       if (var9 != var4) {
  219.          return false;
  220.       } else {
  221.          return true;
  222.       }
  223.    }
  224.  
  225.    protected UTF8Reader$UTF8DataChunk createClump(int var1) {
  226.       UTF8Reader$UTF8DataChunk var2 = new UTF8Reader$UTF8DataChunk(this.this$0, this);
  227.       UTF8Reader$UTF8DataChunk var3 = this.fNextChunk;
  228.       UTF8Reader$UTF8DataChunk var4 = var2;
  229.  
  230.       UTF8Reader$UTF8DataChunk var5;
  231.       do {
  232.          var5 = new UTF8Reader$UTF8DataChunk(this.this$0, var3);
  233.          var4.fNextChunk = var5;
  234.          var3 = var3.fNextChunk;
  235.          var4 = var5;
  236.       } while(var5.fChunk != var1);
  237.  
  238.       return var2;
  239.    }
  240.  
  241.    public int addString(int var1, int var2) {
  242.       int var3 = var1 >> 14;
  243.       if (var3 != this.fChunk) {
  244.          if (this.fPreviousChunk != null) {
  245.             return this.fPreviousChunk.addString(var1, var2);
  246.          } else {
  247.             try {
  248.                this.this$0.fErrorHandler.error(168);
  249.             } catch (Exception var5) {
  250.             }
  251.  
  252.             return -1;
  253.          }
  254.       } else {
  255.          int var4 = var1 + var2 - 1 >> 14;
  256.          return var3 == var4 ? this.fStringPool.addString(this, var1 & 16383, var2) : this.fStringPool.addString(this.createClump(var4), var1 & 16383, var2);
  257.       }
  258.    }
  259.  
  260.    public int addSymbol(int var1, int var2, int var3) {
  261.       int var4 = var1 >> 14;
  262.       if (var4 != this.fChunk) {
  263.          if (this.fPreviousChunk != null) {
  264.             return this.fPreviousChunk.addSymbol(var1, var2, var3);
  265.          } else {
  266.             try {
  267.                this.this$0.fErrorHandler.error(168);
  268.             } catch (Exception var6) {
  269.             }
  270.  
  271.             return -1;
  272.          }
  273.       } else {
  274.          int var5 = var1 + var2 - 1 >> 14;
  275.          if (var4 == var5) {
  276.             if (var3 == 0) {
  277.                var3 = this.getHashcode(var1, var2);
  278.             }
  279.  
  280.             return this.fStringPool.addSymbol(this, var1 & 16383, var2, var3);
  281.          } else {
  282.             if (var3 == 0) {
  283.                var3 = this.getHashcode(var1, var2);
  284.             }
  285.  
  286.             return this.fStringPool.addSymbol(this.createClump(var5), var1 & 16383, var2, var3);
  287.          }
  288.       }
  289.    }
  290.  
  291.    public void append(ChunkyCharArray var1, int var2, int var3) {
  292.       UTF8Reader$UTF8DataChunk var4 = this.chunkFor(var2);
  293.       int var5 = var2 + var3;
  294.       int var6 = var2 & 16383;
  295.       byte[] var7 = this.fData;
  296.  
  297.       while(var2 < var5) {
  298.          int var8 = var7[var6++] & 255;
  299.          ++var2;
  300.          if (var6 == 16384) {
  301.             var4 = var4.fNextChunk;
  302.             var7 = var4.fData;
  303.             var6 = 0;
  304.          }
  305.  
  306.          if ((var8 & 128) == 0) {
  307.             var1.append((char)var8);
  308.          } else {
  309.             int var9 = var7[var6++] & 255;
  310.             ++var2;
  311.             if (var6 == 16384) {
  312.                var4 = var4.fNextChunk;
  313.                var7 = var4.fData;
  314.                var6 = 0;
  315.             }
  316.  
  317.             if ((224 & var8) == 192) {
  318.                int var10 = ((31 & var8) << 6) + (63 & var9);
  319.                var1.append((char)var10);
  320.             } else {
  321.                int var13 = var7[var6++] & 255;
  322.                ++var2;
  323.                if (var6 == 16384) {
  324.                   var4 = var4.fNextChunk;
  325.                   var7 = var4.fData;
  326.                   var6 = 0;
  327.                }
  328.  
  329.                if ((240 & var8) == 224) {
  330.                   int var11 = ((15 & var8) << 12) + ((63 & var9) << 6) + (63 & var13);
  331.                   var1.append((char)var11);
  332.                } else {
  333.                   int var14 = var7[var6++] & 255;
  334.                   ++var2;
  335.                   if (var6 == 16384) {
  336.                      var4 = var4.fNextChunk;
  337.                      var7 = var4.fData;
  338.                      var6 = 0;
  339.                   }
  340.  
  341.                   int var12 = ((15 & var8) << 18) + ((63 & var9) << 12) + ((63 & var13) << 6) + (63 & var14);
  342.                   if (var12 < 65536) {
  343.                      var1.append((char)var12);
  344.                   } else {
  345.                      var1.append((char)((var12 - 65536 >> 10) + '\ud800'));
  346.                      var1.append((char)((var12 - 65536 & 1023) + '\udc00'));
  347.                   }
  348.                }
  349.             }
  350.          }
  351.       }
  352.  
  353.    }
  354.  
  355.    protected int getHashcode(int var1, int var2) {
  356.       UTF8Reader$UTF8DataChunk var3 = this.chunkFor(var1);
  357.       int var4 = var1 + var2;
  358.       int var5 = 0;
  359.       int var6 = 0;
  360.       int var7 = var1 & 16383;
  361.       byte[] var8 = var3.fData;
  362.  
  363.       while(var1 < var4) {
  364.          int var9 = var8[var7++] & 255;
  365.          ++var1;
  366.          if (var7 == 16384) {
  367.             var3 = var3.fNextChunk;
  368.             var8 = var3.fData;
  369.             var7 = 0;
  370.          }
  371.  
  372.          if ((var9 & 128) == 0) {
  373.             var5 = StringHasher.hashChar(var5, var6++, var9);
  374.          } else {
  375.             int var10 = var8[var7++] & 255;
  376.             ++var1;
  377.             if (var7 == 16384) {
  378.                var3 = var3.fNextChunk;
  379.                var8 = var3.fData;
  380.                var7 = 0;
  381.             }
  382.  
  383.             if ((224 & var9) == 192) {
  384.                int var11 = ((31 & var9) << 6) + (63 & var10);
  385.                var5 = StringHasher.hashChar(var5, var6++, var11);
  386.             } else {
  387.                int var16 = var8[var7++] & 255;
  388.                ++var1;
  389.                if (var7 == 16384) {
  390.                   var3 = var3.fNextChunk;
  391.                   var8 = var3.fData;
  392.                   var7 = 0;
  393.                }
  394.  
  395.                if ((240 & var9) == 224) {
  396.                   int var12 = ((15 & var9) << 12) + ((63 & var10) << 6) + (63 & var16);
  397.                   var5 = StringHasher.hashChar(var5, var6++, var12);
  398.                } else {
  399.                   int var17 = var8[var7++] & 255;
  400.                   ++var1;
  401.                   if (var7 == 16384) {
  402.                      var3 = var3.fNextChunk;
  403.                      var8 = var3.fData;
  404.                      var7 = 0;
  405.                   }
  406.  
  407.                   int var13 = ((15 & var9) << 18) + ((63 & var10) << 12) + ((63 & var16) << 6) + (63 & var17);
  408.                   if (var13 < 65536) {
  409.                      var5 = StringHasher.hashChar(var5, var6++, var13);
  410.                   } else {
  411.                      var5 = StringHasher.hashChar(var5, var6++, (var13 - 65536 >> 10) + '\ud800');
  412.                      var5 = StringHasher.hashChar(var5, var6++, (var13 - 65536 & 1023) + '\udc00');
  413.                   }
  414.                }
  415.             }
  416.          }
  417.       }
  418.  
  419.       return StringHasher.finishHash(var5);
  420.    }
  421. }
  422.